package com.baiduspring.function.elasticsearch.operation;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.elasticsearch.search.sort.SortOrder;

import java.util.Map;
import java.util.Objects;

/**
 * 查询参数
 *
 * @author xiongyan
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
public class QueryInput {
    /**
     * 索引名
     */
    private String[] indices;
    /**
     * 索引类型
     */
    private String[] types;
    /**
     * 检索关键字
     */
    private String keywords;
    /**
     * 检索字段
     */
    private String[] filterFields;
    /**
     * 高亮字段
     */
    private String[] highlightFields;
    /**
     * 输出的数据字段
     */
    private Map<String, Class> outputFields;
    /**
     * 文档字段容器，类似与ｍａｐ
     * 按照指定的列排序.SortOrder.DESC: 降序; SortOrder.ASC: 升序
     */
    private Doc<String, SortOrder> sortFields;
    /**
     * 多个条件值。如：key1=123 and key2=456 ...
     */
    private Doc<String, Object> multipleConditions;
    /**
     * 当前页
     */
    private Integer currentPage;
    /**
     * 页面显示条数
     */
    private Integer pageSize;

    /**
     * 检索开始位置
     *
     * @return　返回开始位置索引
     */
    public Integer from() {
        return Objects.nonNull(currentPage) && currentPage > 1 ? (currentPage - 1) * pageSize : 0;
    }

}
